#pragma once

#include "core/iengine.h"

namespace Demo {

class TileEnginePrivate;

class TileEngine : public Core::IEngine
{
public:
    TileEngine();
    virtual ~TileEngine();

    void initialization(SDL_Surface *screen);

    void destroy();

    void logic(const long& elapsedTimeMs);

    void draw();

    void onKeyDown(SDLKey key);

    void onKeyUp(SDLKey key);

    void onMouseUp(Core::MouseEvent event);

    void onMouseDown(Core::MouseEvent event);

    void onMouseMove(Core::MouseEvent event);

    void onIdle();

private:
    std::shared_ptr<TileEnginePrivate> d;
};

} // namespace Demo
